﻿using System.Collections.Generic;

namespace RealEstate.MVC.Web.Helper
{
    public static class ForEachHelper
    {
        //LẤY GIÁ CÁC GIÁ TRỊ CỦA ITEM TRONG LIST - MANH.NGUYEN - JAN, 26 - 2011
        //SỬ DỤNG TRONG ĐÁNH SỐ THỨ TỰ CỦA DANH SÁCH
        /*
         * CÁCH DÙNG:
         * -----------------------------------------------------
            foreach (var item in ForEachHelper.WithIndex(collection))
            {
                Console.Write("Index=" + item.Index);
                Console.Write(";Value= " + item.Value);
                Console.Write(";IsLast=" + item.IsLast);
                Console.WriteLine();
            }
        *-------------------------------------------------------
        */
        public sealed class Item<T>
        {
            public int Index { get; set; } //VỊ TRÍ HIỆN TẠI
            public T Value { get; set; } //GIÁ TRỊ HIỆN TẠI
            public bool IsLast { get; set; } //GIÁ TRỊ CUỐI CÙNG
        }
        /// <summary>
        /// MANH.NGUYEN - 18/08/2011 
        /// Kiểm tra giá trị null trước khi truyền vào danh sách
        /// </summary>
        public static IEnumerable<Item<T>> WithIndex<T>(IEnumerable<T> enumerable)
        {
            if (enumerable != null)
            {
                Item<T> item = null;
                foreach (var value in enumerable)
                {
                    var next = new Item<T> { Index = 1, Value = value, IsLast = false };
                    if (item != null)
                    {
                        next.Index = item.Index + 1;
                        yield return item;
                    }
                    item = next;
                }
                if (item != null)
                {
                    item.IsLast = true;
                    yield return item;
                }
            }
        }
    }

}
